L05: Linux: soubory, oprávnění

linux.edumach.cz



1. Východiska

Systém UNIX (1970) byl od prvopočátku navržen jako víceuživatelský. Tuto vlastnost převzal i systém Linux (1992). Windows byl ještě v roce 1998 stále jednouživatelský. Technicky podporoval více uživatelů, ale bez jakékoliv ochrany dat. Podpora více uživatelů přišla až v roce 2000 s Windows 2000.

Standard POSIX definuje systém oprávnění, který používají všechny unixové systémy (UNIX, GNU/Linux, macOS, iOS, Android, WebOS, Tizen...). Ten umožňuje definovat pravidla přístupových práv, aby uživatelé nemohli přistupovat k datům jiných uživatelů, zajišťuje maximální bezpečnost systému atp.

Systémy Windows si přístupová oprávní řeší po svém – tedy úplně jiným způsobem nekompatibilním se standardem POSIX.

2. Výpis oprávnění

Každý soubor a adresář má přidělena různá oprávnění (i ty skryté). Ty se vztahují na tři kategorie uživatelů: vlastníka, skupinu a ostatní. Jsou vidět v podrobném výpisu adresáře (přepínač -l):

$ ls -l
$ ls -la

Výpis by mohl vypadat například takto (toto je pouze ukázkový příklad, který by ve skutečnosti těžko nastal):

3. Typ souboru

Než si je objasníme, je potřeba vysvětlit co znamená první znak. Ten zobrazuje typ souboru. Znaků je víc. Pro běžné potřeby stačí znát tyto tři:

- (pomlčka) běžný soubor
d adresář (directory)
l symbolický odkaz -- "symlink" (něco jako zástupce ve Windows)

Zbylých devět znaků definuje oprávnění pro tři skupiny uživatelů:

První znak každé trojice je r čtení (read), druhý w zápis (write), třetí je x spouštění (executable). Písmeno x u adresáře znamená právo jej "otevírat" (vstupovat do něj). Pokud je na příslušném místě místo nich znak - (pomlčka), je příslušné oprávnění odepřeno.

Právo Význam u souboru Význam u adresáře
r Čtení souboru Čtení názvů obsažených položek
w Zápis do souboru Vytváření souborů a adresářů
x Spuštění souboru Vstup do adresáře

4. Vlastník a skupina

To jsou ty dva sloupce se jmény. První sloupec je vlastník, druhý název skupiny. U vlastních souborů se skupina jmenuje stejně jako vlastník a jediným členem jste pouze vy. Důvodem je, že každý uživatel musí být vždy členem alespoň jedné skupiny.

Jen pro zajímavost:

5. Změna oprávnění

5.1. Absolutní (číselný) mód

Změny oprávnění může provádět pouze vlastník (nebo root). Ve výchozím nastavení jsou všechna nastavena tak, aby je nebylo nutné měnit. V některých konkrétních případech jsou naopak změny nezbytné (např. spouštění skriptů). Základní syntaxe je:

$ chmod <cislo> <soubor|adresar>

Parametr <cislo> je trojciferné vyjádření oprávnění v intervalu 000777. První cifra je vlastník, druhá skupina, třetí ostatní. Oprávnění tvoří součet čísel 4, 2 a 1.

Příklady některých běžných oprávnění:

rwx------	700
rw-------	600
rw-r--r--	644
rw-rw----	660
rwxr-wr-x	755
rwxrwx---	770
rwxrwxrwx	777
rw-rw-rw-	666

Vlastník si ke svým souborům může práva upravovat bez omezení – rizika, že si je po odebrání práv nebude moci přidat.

Práva se kódují v oktalové číselné soustavě. Minimální je kód 000, maximální 777. Kolik to je možností? Čísla 1, 2 a 4 jsou mocniny řádů: 20 = 1, 21 = 2, 22 = 4.

Zajímavý je tento pohled:

DEC	BIN	práva
 0	000	 ---
 1	001	 --x
 2	010	 -w-
 3	011	 -wx
 4	100	 r--
 5	101	 r-x
 6	110	 rw-
 7	111	 rwx

5.2. Relativní mód

Tento způsob je oproti číselnému praktičtější:

  1. oprávnění měníme bez ovlivnění stávajících oprávnění,
  2. není nutné počítání.

Několik příkladů:

$ chmod +x soubor
$ chmod g+r soubor
$ chmod go-w soubor
$ chmod o+rw soubor

u = user (vlastník), g = group (skupina), o = other (ostatní), a = all (všichni, ekvivalent ugo).
+ oprávnění přidává, - oprávnění odebírá.

Tento způsob se nejčastěji využívá pro přidání oprávnění spouštění (+x).

Pokud chybí písmeno „komu“, přidá se všem (viz první ukázkový příklad).

6. Změna vlastníka nebo skupiny

Tyto změny běžný uživatel provádět nesmí. Na to má oprávnění pouze root nebo uživatel s právy sudo. Pro ně se práva nekontrolují.

Jsou zde uvedeny pouze pro úplnost.

$ chown <nazev> <soubor>
$ chgrp <nazev> <soubor>

Seznam uživatelů je v souboru /etc/passwd, seznam skupin v souboru /etc/group.

7. Správa uživatelů

Linuxový terminál nabízí bohatý příkazový aparát pro správu těchto kategorií. Existují příkazy jako groups, adduser a řada dalších. I všechny tyto činnosti smí provádět pouze root nebo člen skupiny sudo.

8. Shrnutí

9. ❓ Kontrolní otázky

  1. V jaké číselné soustavě jsou číselné zápisy oprávnění?
  2. Jak se z výpisu adresáře pozná, co je adresář a co soubor
  3. Přepište do notace r,w,x číselné oprávnění NNN.
  4. Zapište číselně oprávnění -rw-rw-r-- (nebo jiné).
  5. Které z oprávnění zajistí, že do adresáře budete mít přístup pouze vy a nikdo jiný?
  6. Poslední trojice znaků v zápise oprávnění se vztahuje na...
  7. Jakému číselnému vyjádření odpovídá oprávnění adresáře /root?
  8. Co znamená oprávnění x u adresáře a co u souboru?
  9. Co reprezentují dva sloupce se jmény v podrobném výpisu adresáře?
  10. Pomocí relativního módu upravte stávající oprávnění na...
  11. Jaký příkaz slouží pro změnu oprávnění a jakou má syntaxi?
  12. Ve kterých souborech jsou uloženy seznamy uživatelů a skupin?

10. 💾 Cvičení

Zkuste si

10.1. prava1

Vytvořte adresář ~/prava1 a přesuňte se do něj. Další činnosti provádějte v něm.

  1. Zkopírujte do něj soubor /etc/apt/sources.list pod novým názvem zdroje.
  2. Souboru zdroje přidejte práva zápisu skupině.
  3. Přesměrujte výstup příkazu ascii –d do souboru ascii.txt.
  4. Vytvořte soubor prg.c a přidejte právo spouštění pouze sobě.
  5. Do nového souboru .config zapište v číselném vyjádření jeho oprávnění.
  6. Vytvořte podadresář zaloha a nastavte mu práva rwx------.

10.2. prava2

Vytvořte adresář ~/prava2 a přesuňte se do něj. Další činnosti provádějte v něm.

  1. Do tohoto adresáře zkopírujte soubor /etc/fstab.
  2. Nastavte mu práva na rw-------.
  3. Změňte mu název na disky.
  4. Vytvořte skrytý adresář config.
  5. Nastavte mu práva tak, aby jej mohl otevřít pouze majitel.
  6. Do souboru web přesměrujte výpis adresáře /etc/apache2.
  7. Obsah kolika souborů z adresáře /etc/bind si zobrazíte, pokud budete členem skupiny root? Odpověď (číslo) zapište do nového souboru bind.

10.3. prava3

Vytvořte adresář ~/prava3, v něm soubor pr3. Do něj pište pouze číslované odpovědi:

  1. Které kategorie uživatelů (vlastník, skupina, ostatní) budou moci zapisovat do souboru s právy rw-r--rw-?

  2. Přepište předchozí oprávnění v číselném vyjádření:

  3. Sestavte příkaz, který nastaví práva rwxr-x--- souboru ~/skript.sh.

  4. Jaká práva adresáři skripty budou nastavena číslem 750? Vypište způsobem rwx. Výsledkem bude 10 znaků:

  5. Přepište číselně práva souboru soubor.txt z obrázku níže: